package com.linyaonan.leetcode.easy._594;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
 *
 * 现在，给定一个整数数组，你需要在所有可能的子序列中找到最长的和谐子序列的长度。
 *
 * 示例 1:
 *
 * 输入: [1,3,2,2,5,2,3,7]
 * 输出: 5
 * 原因: 最长的和谐数组是：[3,2,2,2,3].
 * 说明: 输入的数组长度最大不超过20,000.
 *
 *
 * @author: Lin
 * @date: 2020/1/3
 */
public class LongestHarmonious {
    public int findLHS(int[] nums) {
        if (nums == null || nums.length == 1) {
            return 0;
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        int max = 0;
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            Integer key = entry.getKey();
            if (map.containsKey(key + 1)) {
                max = Math.max(map.get(key) + map.get(key + 1), max);
            }
        }

        return max;
    }
}
